// 运行时配置
import { Toast } from 'antd-mobile';
import _ from 'lodash';
import { history } from 'umi';

// 请求的统一配置
export const request = {
  baseURL: `/api`,
  // other axios options you want
  errorConfig: {
    errorHandler(error, opts) {
      if (opts?.skipErrorHandler) throw error;
      if (error.response) {
        // 请求成功发出且服务器也响应了状态码，但状态代码超出了 2xx 的范围
        const { status } = error.response;
        // Token过期
        if (status && status === 401) {
          window.localStorage.clear();
          history.push('/login');
        }
        Toast.show({
          icon: 'fail',
          content: `请求错误` + status,
        });
      } else if (error.request) {
        // 请求已经成功发起，但没有收到响应
        Toast.show({
          icon: 'fail',
          content: '服务端无响应',
        });
      } else {
        // 发送请求时出了点问题
        Toast.show({
          icon: 'fail',
          content: '发送请求时异常',
        });
      }
    },
  },
  requestInterceptors: [
    (url, options) => {
      // 拦截请求配置，进行个性化处理。
      const token = localStorage.getItem('Token');
      if (token) {
        options.headers = { Authorization: `Bearer ${token}` };
      }
      return {
        url,
        options,
      };
    },
  ],
  responseInterceptors: [
    (response) => {
      // 拦截响应数据，进行个性化处理
      const { data, headers } = response;
      if (_.includes(headers['content-type'], 'application/json')) {
        if (!data.success) {
          if (data.code === 401) {
            window.localStorage.clear();
            history.push('/login');
          } else {
            Toast.show({
              icon: 'fail',
              content: data.msg || '请求失败！',
            });
          }
        }
      }
      return response;
    },
  ],
};
